home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-01-16 | 1.9 KB | 81 lines | [TEXT/YERK] |
- \ BuildRegMask ReeseWarner 5/13
- \ for MOVEM
- \ 03/06/86 GDC fixed MOVEM
- \ 01/16/94 rfl added mrh's regbit and revmask for movem fix. Delete setreg.
- 0 -> dlevel
-
- operand exPtr
-
- \ is first char in string = char?
- : Char= { addr len char -- bool }
- addr c@ char =
- ;
-
- \ \ for / in MOVEM
- \ : setReg { mode reg# flag work \ shift -- work }
- \
- \ flag
- \ IF \ if regular mask
- \ mode 8 * reg# + 1 swap << work or -> work
- \ ELSE
- \ mode 0=
- \ IF
- \ 8 -> shift
- \ ELSE
- \ 0 -> shift
- \ THEN
- \ 8 reg# - ++> shift
- \ 1 shift 1- << work or -> work
- \ THEN
- \ work val" work is "
- \ ;
-
- : REGBIT { mode reg# -- n }
- 1
- reg# mode 1 = \ anmode=1
- IF 8 +
- THEN
- << ;
-
- \ Flag indicates whether it is regular or pre-decrement
- \ 1 = regular
- \ 0 = predecrement
- \ modes 0 data register
- \ 1 address register
- : BuildRegMask { opPtr flag \ tokentype work -- regMask }
- 0 -> work
- BEGIN
- nextToken -> tokentype \ if next token is , or eol then
- get: token ascii , char= \ get out
- tokentype eol = or not
- WHILE
- msg" in WHILE "
- get: token ascii / char=
- IF
- msg" IT'S A / "
- mode: opPtr reg: opPtr regBit work or -> work
- opPtr getOp
- ELSE
- msg" ITSA something else "
- exPtr getOp
- mode: opPtr mode: exPtr = not
- IF
- 210 asmError
- ELSE
- reg: exPtr 1+ reg: opPtr
- DO
- mode: opPtr i regBit work or -> work
- LOOP
- THEN
- THEN
- REPEAT
- mode: opPtr reg: opPtr regBit work or -> work
- work
- ;
-
-
- : REVMASK { mask -- mask' } \ Reverses the mask bits for predecrement mode.
- 0 16 0 DO 2* mask 1 and or
- mask 2/ -> mask
- LOOP ;
-